home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 1
/
Merciful - Disc 1.iso
/
software
/
t
/
touch_stones
/
touchstones.dms
/
touchstones.adf
/
Empty
/
ProgStones1.Bak
/
ProgStones1.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1987-02-25
|
3KB
|
180 lines
Screen Open 0,352,290,32,0
Screen Display 0,112,18,352,290
Flash Off
'
Dim N(12,8)
'
'
Load "Spencer:Empty/Stones.abk"
'
Load Iff "Spencer:Lo-Res/TouchstonesBoard1"
'
'
'
'
Randomize Timer
Dim ARRAYA(12,8),ARRAYB(72)
For A=1 To 36
ARRAYB(A)=A
ARRAYB(36+A)=A
Next A
For A=1 To 300
B=Rnd(71)+1
ABACK: C=Rnd(71)+1 : If C=B Then Goto ABACK
D=ARRAYB(B)
ARRAYB(B)=ARRAYB(C)
ARRAYB(C)=D
Next A
'
'Setting Up Board
ARRAYA(1,1)=ARRAYB(1) : Paste Bob 1*20+20,1*20+18,ARRAYB(B)
ARRAYA(12,1)=ARRAYB(2) : Paste Bob 12*20+20,38,ARRAYB(2)
ARRAYA(1,8)=ARRAYB(3) : Paste Bob 40,178,ARRAYB(3)
ARRAYA(12,8)=ARRAYB(4) : Paste Bob 260,178,ARRAYB(4)
ARRAYA(6,4)=ARRAYB(5) : Paste Bob 140,98,ARRAYB(5)
ARRAYA(7,5)=ARRAYB(6) : Paste Bob 160,118,ARRAYB(6)
'
LSCORE=0 : RSCORE=0
PSCORE
'
'
'
'
COUNT=7
Gosub PNEXTSTONES
NEK: K=Mouse Key : If K=1 Then Goto CHECKSQ Else Goto NEK
CHECKSQ: X=X Mouse : Y=Y Mouse
XP=Int((X-132)/20) : YP=Int((Y-36)/20)
'
L=XP : M=YP : Gosub SCORER
If TEMPSCORE=0 Then Goto NEK
If ARRAYA(L,M)>0 Then Goto NEK
'
XPX=XP*20+132 : YPY=YP*20+36
Amreg(0)=(XPX-412) : Amreg(1)=(YPY-56)
Sprite 4,412,56,ARRAYB(COUNT)
A$="M RA,RB,50"
Amal 4,A$
Amal On 4
Wait 50 : Sprite Off 4
Paste Bob XP*20+20,YP*20+18,ARRAYB(COUNT)
Amal Off 0
L=XP : M=YP
Gosub SCORER
LSCORE=LSCORE+TEMPSCORE
If COUNT=72 Then Direct
ARRAYA(L,M)=ARRAYB(COUNT)
PSCORE
Inc COUNT
Gosub PNEXTSTONES
Goto NEK
'
'
'
Hide On
Double Buffer
Limit Mouse 112,18 To 462,300
'
'
LMAN
Wait Key
Direct
'
'
'
Procedure LMAN
Bob 3,X Mouse,Y Mouse,37
C$="A 0,(37,2)(38,3)(39,4)(40,5)(41,6)(40,5)(39,4)(38,3) ; "
C$=C$+"Loop: L X=XM-112 L Y=YM-18 Pause J Loop"
Channel 3 To Bob 3
Amal 3,C$
Amal On
End Proc
'
'
Procedure PSCORE
Shared LSCORE,RSCORE
PS1=Int(LSCORE/100) : PSS=PS1*100 : PS2=Int((LSCORE-PSS)/10)
PST=PS2*10 : PS3=LSCORE-PSS-PST
Paste Bob 40,218,47+PS1
Paste Bob 60,218,47+PS2
Paste Bob 80,218,47+PS3
PS1=Int(RSCORE/100) : PSS=PS1*100 : PS2=Int((RSCORE-PSS)/10)
PST=PS2*10 : PS3=RSCORE-PSS-PST
Paste Bob 219,218,47+PS1
Paste Bob 239,218,47+PS2
Paste Bob 259,218,47+PS3
End Proc
'
'
PNEXTSTONES:
LLL=0 : SCORENO=0
LBL5: For L=1 To 12
For M=1 To 8
N(L,M)=0
If ARRAYA(L,M)=0
Gosub SCORER
SCORENO=SCORENO+TEMPSCORE
N(L,M)=TEMPSCORE
RSCORE=LLL
PSCORE
End If
Next M
Next L
If LLL=73 Then Direct
If SCORENO>0 Then Goto SHUF
Gosub SHUFFLE
LLL=LLL+1
Goto LBL5
SHUF:
For A=COUNT To COUNT+7
If A>72 Then Goto BBACK
Paste Bob 300,(A-COUNT)*20+38,ARRAYB(A)
Goto CBACK
BBACK: Paste Bob 299,(A-COUNT)*20+38,47
CBACK: Next A
Return
'
'
'
SCORER: TEMPSCORE=0
J=ARRAYB(COUNT)
If M=1 Then Goto LBL1
K=ARRAYA(L,M-1)
Gosub SCOREMATCH
'
LBL1: If M=8 Then Goto LBL2
K=ARRAYA(L,M+1)
Gosub SCOREMATCH
'
LBL2: If L=1 Then Goto LBL3
K=ARRAYA(L-1,M)
Gosub SCOREMATCH
'
LBL3: If L=12 Then Goto LBL4
K=ARRAYA(L+1,M)
Gosub SCOREMATCH
'
LBL4: If TEMPSCORE=0 Then Return
TEMPSCORE=2^TEMPSCORE
'
Return
'
'
SCOREMATCH: If K=0 Then Return
Dec J : Dec K
If Int(J/6)=Int(K/6) Then Inc TEMPSCORE
If J-Int(J/6)=K-Int(K/6) Then Bell
If J=K Then Dec TEMPSCORE
Return
'
'
'
SHUFFLE:
GG=ARRAYB(COUNT)
For HH=COUNT To 71
ARRAYB(HH)=ARRAYB(HH+1)
Next HH
ARRAYB(72)=GG
Inc LLL
Return